home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 4: GNU Archives / Linux Cubed Series 4 - GNU Archives.iso / gnu / binutils.7 / binutils / binutils-2.7 / include / coff / alpha.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-07-04  |  10.0 KB  |  359 lines

  1. /* ECOFF support on Alpha machines.
  2.    coff/ecoff.h must be included before this file.  */
  3.  
  4. /********************** FILE HEADER **********************/
  5.  
  6. struct external_filehdr {
  7.   unsigned char f_magic[2];    /* magic number            */
  8.   unsigned char f_nscns[2];    /* number of sections        */
  9.   unsigned char f_timdat[4];    /* time & date stamp        */
  10.   unsigned char f_symptr[8];    /* file pointer to symtab    */
  11.   unsigned char f_nsyms[4];    /* number of symtab entries    */
  12.   unsigned char f_opthdr[2];    /* sizeof(optional hdr)        */
  13.   unsigned char f_flags[2];    /* flags            */
  14. };
  15.  
  16. /* Magic numbers are defined in coff/ecoff.h.  */
  17. #define ALPHA_ECOFF_BADMAG(x) ((x).f_magic!=ALPHA_MAGIC)
  18.  
  19. /* The object type is encoded in the f_flags.  */
  20. #define F_ALPHA_OBJECT_TYPE_MASK    0x3000
  21. #define F_ALPHA_NO_SHARED        0x1000
  22. #define F_ALPHA_SHARABLE        0x2000
  23. #define F_ALPHA_CALL_SHARED        0x3000
  24.  
  25. #define    FILHDR    struct external_filehdr
  26. #define    FILHSZ    24
  27.  
  28. /********************** AOUT "OPTIONAL HEADER" **********************/
  29.  
  30.  
  31. typedef struct external_aouthdr
  32. {
  33.   unsigned char magic[2];    /* type of file                */
  34.   unsigned char    vstamp[2];    /* version stamp            */
  35.   unsigned char bldrev[2];    /* ?? */
  36.   unsigned char padding[2];    /* pad to quadword boundary        */
  37.   unsigned char    tsize[8];    /* text size in bytes            */
  38.   unsigned char    dsize[8];    /* initialized data "  "        */
  39.   unsigned char    bsize[8];    /* uninitialized data "   "        */
  40.   unsigned char    entry[8];    /* entry pt.                */
  41.   unsigned char text_start[8];    /* base of text used for this file */
  42.   unsigned char data_start[8];    /* base of data used for this file */
  43.   unsigned char bss_start[8];    /* base of bss used for this file */
  44.   unsigned char gprmask[4];    /* bitmask of general registers used */
  45.   unsigned char fprmask[4];    /* bitmask of floating point registers used */
  46.   unsigned char gp_value[8];    /* value for gp register */
  47. } AOUTHDR;
  48.  
  49. /* compute size of a header */
  50.  
  51. #define AOUTSZ 80
  52. #define AOUTHDRSZ 80
  53.  
  54. /********************** SECTION HEADER **********************/
  55.  
  56. struct external_scnhdr {
  57.   unsigned char    s_name[8];    /* section name            */
  58.   unsigned char    s_paddr[8];    /* physical address, aliased s_nlib */
  59.   unsigned char    s_vaddr[8];    /* virtual address        */
  60.   unsigned char    s_size[8];    /* section size            */
  61.   unsigned char    s_scnptr[8];    /* file ptr to raw data for section */
  62.   unsigned char    s_relptr[8];    /* file ptr to relocation    */
  63.   unsigned char    s_lnnoptr[8];    /* file ptr to line numbers    */
  64.   unsigned char    s_nreloc[2];    /* number of relocation entries    */
  65.   unsigned char    s_nlnno[2];    /* number of line number entries*/
  66.   unsigned char    s_flags[4];    /* flags            */
  67. };
  68.  
  69. #define    SCNHDR    struct external_scnhdr
  70. #define    SCNHSZ    64
  71.  
  72. /********************** RELOCATION DIRECTIVES **********************/
  73.  
  74. struct external_reloc {
  75.   unsigned char r_vaddr[8];
  76.   unsigned char r_symndx[4];
  77.   unsigned char r_bits[4];
  78. };
  79.  
  80. #define RELOC struct external_reloc
  81. #define RELSZ 16
  82.  
  83. /* Constants to unpack the r_bits field.  The Alpha seems to always be
  84.    little endian, so I haven't bothered to define big endian variants
  85.    of these.  */
  86.  
  87. #define RELOC_BITS0_TYPE_LITTLE            0xff
  88. #define RELOC_BITS0_TYPE_SH_LITTLE        0
  89.  
  90. #define RELOC_BITS1_EXTERN_LITTLE        0x01
  91.  
  92. #define RELOC_BITS1_OFFSET_LITTLE        0x7e
  93. #define RELOC_BITS1_OFFSET_SH_LITTLE        1
  94.  
  95. #define RELOC_BITS1_RESERVED_LITTLE        0x80
  96. #define RELOC_BITS1_RESERVED_SH_LITTLE        7
  97. #define RELOC_BITS2_RESERVED_LITTLE        0xff
  98. #define RELOC_BITS2_RESERVED_SH_LEFT_LITTLE    1
  99. #define RELOC_BITS3_RESERVED_LITTLE        0x03
  100. #define RELOC_BITS3_RESERVED_SH_LEFT_LITTLE    9
  101.  
  102. #define RELOC_BITS3_SIZE_LITTLE            0xfc
  103. #define RELOC_BITS3_SIZE_SH_LITTLE        2
  104.  
  105. /* The r_type field in a reloc is one of the following values.  */
  106. #define ALPHA_R_IGNORE        0
  107. #define ALPHA_R_REFLONG        1
  108. #define ALPHA_R_REFQUAD        2
  109. #define ALPHA_R_GPREL32        3
  110. #define ALPHA_R_LITERAL        4
  111. #define ALPHA_R_LITUSE        5
  112. #define ALPHA_R_GPDISP        6
  113. #define ALPHA_R_BRADDR        7
  114. #define ALPHA_R_HINT        8
  115. #define ALPHA_R_SREL16        9
  116. #define ALPHA_R_SREL32           10
  117. #define ALPHA_R_SREL64           11
  118. #define ALPHA_R_OP_PUSH           12
  119. #define ALPHA_R_OP_STORE       13
  120. #define ALPHA_R_OP_PSUB           14
  121. #define ALPHA_R_OP_PRSHIFT     15
  122. #define ALPHA_R_GPVALUE           16
  123. #define ALPHA_R_GPRELHIGH      17
  124. #define ALPHA_R_GPRELLOW       18
  125. #define ALPHA_R_IMMED          19
  126.  
  127. /* With ALPHA_R_LITUSE, the r_size field is one of the following values.  */
  128. #define ALPHA_R_LU_BASE         1
  129. #define ALPHA_R_LU_BYTOFF       2
  130. #define ALPHA_R_LU_JSR          3
  131.  
  132. /* With ALPHA_R_IMMED, the r_size field is one of the following values.  */
  133. #define ALPHA_R_IMMED_GP_16     1
  134. #define ALPHA_R_IMMED_GP_HI32   2
  135. #define ALPHA_R_IMMED_SCN_HI32  3
  136. #define ALPHA_R_IMMED_BR_HI32   4
  137. #define ALPHA_R_IMMED_LO32      5
  138.  
  139. /********************** SYMBOLIC INFORMATION **********************/
  140.  
  141. /* Written by John Gilmore.  */
  142.  
  143. /* ECOFF uses COFF-like section structures, but its own symbol format.
  144.    This file defines the symbol format in fields whose size and alignment
  145.    will not vary on different host systems.  */
  146.  
  147. /* File header as a set of bytes */
  148.  
  149. struct hdr_ext {
  150.     unsigned char     h_magic[2];
  151.     unsigned char    h_vstamp[2];
  152.     unsigned char    h_ilineMax[4];
  153.     unsigned char    h_idnMax[4];
  154.     unsigned char    h_ipdMax[4];
  155.     unsigned char    h_isymMax[4];
  156.     unsigned char    h_ioptMax[4];
  157.     unsigned char    h_iauxMax[4];
  158.     unsigned char    h_issMax[4];
  159.     unsigned char    h_issExtMax[4];
  160.     unsigned char    h_ifdMax[4];
  161.     unsigned char    h_crfd[4];
  162.     unsigned char    h_iextMax[4];
  163.     unsigned char    h_cbLine[8];
  164.     unsigned char    h_cbLineOffset[8];
  165.     unsigned char    h_cbDnOffset[8];
  166.     unsigned char    h_cbPdOffset[8];
  167.     unsigned char    h_cbSymOffset[8];
  168.     unsigned char    h_cbOptOffset[8];
  169.     unsigned char    h_cbAuxOffset[8];
  170.     unsigned char    h_cbSsOffset[8];
  171.     unsigned char    h_cbSsExtOffset[8];
  172.     unsigned char    h_cbFdOffset[8];
  173.     unsigned char    h_cbRfdOffset[8];
  174.     unsigned char    h_cbExtOffset[8];
  175. };
  176.  
  177. /* File descriptor external record */
  178.  
  179. struct fdr_ext {
  180.     unsigned char    f_adr[8];
  181.     unsigned char    f_cbLineOffset[8];
  182.     unsigned char    f_cbLine[8];
  183.     unsigned char    f_cbSs[8];
  184.     unsigned char    f_rss[4];
  185.     unsigned char    f_issBase[4];
  186.     unsigned char    f_isymBase[4];
  187.     unsigned char    f_csym[4];
  188.     unsigned char    f_ilineBase[4];
  189.     unsigned char    f_cline[4];
  190.     unsigned char    f_ioptBase[4];
  191.     unsigned char    f_copt[4];
  192.     unsigned char    f_ipdFirst[4];
  193.     unsigned char    f_cpd[4];
  194.     unsigned char    f_iauxBase[4];
  195.     unsigned char    f_caux[4];
  196.     unsigned char    f_rfdBase[4];
  197.     unsigned char    f_crfd[4];
  198.     unsigned char    f_bits1[1];
  199.     unsigned char    f_bits2[3];
  200.     unsigned char    f_padding[4];
  201. };
  202.  
  203. #define    FDR_BITS1_LANG_BIG        0xF8
  204. #define    FDR_BITS1_LANG_SH_BIG        3
  205. #define    FDR_BITS1_LANG_LITTLE        0x1F
  206. #define    FDR_BITS1_LANG_SH_LITTLE    0
  207.  
  208. #define    FDR_BITS1_FMERGE_BIG        0x04
  209. #define    FDR_BITS1_FMERGE_LITTLE        0x20
  210.  
  211. #define    FDR_BITS1_FREADIN_BIG        0x02
  212. #define    FDR_BITS1_FREADIN_LITTLE    0x40
  213.  
  214. #define    FDR_BITS1_FBIGENDIAN_BIG    0x01
  215. #define    FDR_BITS1_FBIGENDIAN_LITTLE    0x80
  216.  
  217. #define    FDR_BITS2_GLEVEL_BIG        0xC0
  218. #define    FDR_BITS2_GLEVEL_SH_BIG        6
  219. #define    FDR_BITS2_GLEVEL_LITTLE        0x03
  220. #define    FDR_BITS2_GLEVEL_SH_LITTLE    0
  221.  
  222. /* We ignore the `reserved' field in bits2. */
  223.  
  224. /* Procedure descriptor external record */
  225.  
  226. struct pdr_ext {
  227.     unsigned char    p_adr[8];
  228.     unsigned char    p_cbLineOffset[8];
  229.     unsigned char    p_isym[4];
  230.     unsigned char    p_iline[4];
  231.     unsigned char    p_regmask[4];
  232.     unsigned char    p_regoffset[4];
  233.     unsigned char    p_iopt[4];
  234.     unsigned char    p_fregmask[4];
  235.     unsigned char    p_fregoffset[4];
  236.     unsigned char    p_frameoffset[4];
  237.     unsigned char    p_lnLow[4];
  238.     unsigned char    p_lnHigh[4];
  239.     unsigned char    p_gp_prologue[1];
  240.     unsigned char    p_bits1[1];
  241.     unsigned char    p_bits2[1];
  242.     unsigned char    p_localoff[1];
  243.     unsigned char    p_framereg[2];
  244.     unsigned char    p_pcreg[2];
  245. };
  246.  
  247. #define PDR_BITS1_GP_USED_BIG        0x80
  248. #define PDR_BITS1_REG_FRAME_BIG        0x40
  249. #define PDR_BITS1_PROF_BIG        0x20
  250. #define PDR_BITS1_RESERVED_BIG        0x1f
  251. #define PDR_BITS1_RESERVED_SH_LEFT_BIG    8
  252. #define PDR_BITS2_RESERVED_BIG        0xff
  253. #define PDR_BITS2_RESERVED_SH_BIG    0
  254.  
  255. #define PDR_BITS1_GP_USED_LITTLE    0x01
  256. #define PDR_BITS1_REG_FRAME_LITTLE    0x02
  257. #define PDR_BITS1_PROF_LITTLE        0x04
  258. #define PDR_BITS1_RESERVED_LITTLE    0xf8
  259. #define PDR_BITS1_RESERVED_SH_LITTLE    3
  260. #define PDR_BITS2_RESERVED_LITTLE    0xff
  261. #define PDR_BITS2_RESERVED_SH_LEFT_LITTLE 5
  262.  
  263. /* Line numbers */
  264.  
  265. struct line_ext {
  266.     unsigned char    l_line[4];
  267. };
  268.  
  269. /* Symbol external record */
  270.  
  271. struct sym_ext {
  272.     unsigned char    s_value[8];
  273.     unsigned char    s_iss[4];
  274.     unsigned char    s_bits1[1];
  275.     unsigned char    s_bits2[1];
  276.     unsigned char    s_bits3[1];
  277.     unsigned char    s_bits4[1];
  278. };
  279.  
  280. #define    SYM_BITS1_ST_BIG        0xFC
  281. #define    SYM_BITS1_ST_SH_BIG        2
  282. #define    SYM_BITS1_ST_LITTLE        0x3F
  283. #define    SYM_BITS1_ST_SH_LITTLE        0
  284.  
  285. #define    SYM_BITS1_SC_BIG        0x03
  286. #define    SYM_BITS1_SC_SH_LEFT_BIG    3
  287. #define    SYM_BITS1_SC_LITTLE        0xC0
  288. #define    SYM_BITS1_SC_SH_LITTLE        6
  289.  
  290. #define    SYM_BITS2_SC_BIG        0xE0
  291. #define    SYM_BITS2_SC_SH_BIG        5
  292. #define    SYM_BITS2_SC_LITTLE        0x07
  293. #define    SYM_BITS2_SC_SH_LEFT_LITTLE    2
  294.  
  295. #define    SYM_BITS2_RESERVED_BIG        0x10
  296. #define    SYM_BITS2_RESERVED_LITTLE    0x08
  297.  
  298. #define    SYM_BITS2_INDEX_BIG        0x0F
  299. #define    SYM_BITS2_INDEX_SH_LEFT_BIG    16
  300. #define    SYM_BITS2_INDEX_LITTLE        0xF0
  301. #define    SYM_BITS2_INDEX_SH_LITTLE    4
  302.  
  303. #define    SYM_BITS3_INDEX_SH_LEFT_BIG    8
  304. #define    SYM_BITS3_INDEX_SH_LEFT_LITTLE    4
  305.  
  306. #define    SYM_BITS4_INDEX_SH_LEFT_BIG    0
  307. #define    SYM_BITS4_INDEX_SH_LEFT_LITTLE    12
  308.  
  309. /* External symbol external record */
  310.  
  311. struct ext_ext {
  312.     struct    sym_ext es_asym;
  313.     unsigned char    es_bits1[1];
  314.     unsigned char    es_bits2[3];
  315.     unsigned char    es_ifd[4];
  316. };
  317.  
  318. #define    EXT_BITS1_JMPTBL_BIG        0x80
  319. #define    EXT_BITS1_JMPTBL_LITTLE        0x01
  320.  
  321. #define    EXT_BITS1_COBOL_MAIN_BIG    0x40
  322. #define    EXT_BITS1_COBOL_MAIN_LITTLE    0x02
  323.  
  324. #define    EXT_BITS1_WEAKEXT_BIG        0x20
  325. #define    EXT_BITS1_WEAKEXT_LITTLE    0x04
  326.  
  327. /* Dense numbers external record */
  328.  
  329. struct dnr_ext {
  330.     unsigned char    d_rfd[4];
  331.     unsigned char    d_index[4];
  332. };
  333.  
  334. /* Relative file descriptor */
  335.  
  336. struct rfd_ext {
  337.   unsigned char    rfd[4];
  338. };
  339.  
  340. /* Optimizer symbol external record */
  341.  
  342. struct opt_ext {
  343.   unsigned char o_bits1[1];
  344.   unsigned char o_bits2[1];
  345.   unsigned char o_bits3[1];
  346.   unsigned char o_bits4[1];
  347.   struct rndx_ext o_rndx;
  348.   unsigned char o_offset[4];
  349. };
  350.  
  351. #define OPT_BITS2_VALUE_SH_LEFT_BIG    16
  352. #define OPT_BITS2_VALUE_SH_LEFT_LITTLE    0
  353.  
  354. #define OPT_BITS3_VALUE_SH_LEFT_BIG    8
  355. #define OPT_BITS3_VALUE_SH_LEFT_LITTLE    8
  356.  
  357. #define OPT_BITS4_VALUE_SH_LEFT_BIG    0
  358. #define OPT_BITS4_VALUE_SH_LEFT_LITTLE    16
  359.